三维场景覆盖物

最后更新时间:2019年6月17日

功能介绍

与二维类似,三维场景提供图形绘制功能,这也是GIS的基础功能之一,也是非常重要的一部分,可辅助其它功能实现,常辅助实现查询、编辑、分析等功能。三维场景支持的图形表现内容十分丰富,有基本几何图形,即线、圆、矩形、多边形等,以及文本、图片、地标、三维模型等。

功能接口

场景覆盖物(自定义图形)的相关类位于com.zondy.mapgis.android. graphic包中,主要类为Graphic3D、GraphicPoint3D、GraphicCircle3D、GraphicImage3D、GraphicText3D、GraphicPlaceMarker、GraphicModel、GraphicMultiPoint3D、GraphicPolygon3D、GraphicPolylin3D等。

在场景视图中叠加显示一个覆盖物,需先获取一个覆盖物图层(Grapihc3DsOverlay),然后将覆盖物对象通过addGraphic()加载到此图层中。

场景覆盖物组织关系.png

实现方法

各种图形覆盖物的加载方法基本一致,区别只在于创建的覆盖物对象类型不同。

(1)创建覆盖物对象:点、多点、线、区、圆、椭圆、模型、图片、文字、标注;

(2)获取绘图图层:从SceneView中获取默认绘图图层,或创建自定义图层;

(3)向绘图图层添加覆盖物对象:通过叠加层Grapihc3DsOverlay对象的addGraphic()接口加载。

移除场景视图中的覆盖物对象,可由自定义图形图层(Grapihc3DsOverlay)的removeGraphic()、removeGraphicByIndex()、removeAllGraphics()、removeGraphics()等接口实现。

1 点 Sample详情

//构造单点对象
GraphicPoint3D mGraphicPoint3D = new GraphicPoint3D();
mGraphicPoint3D.setPoint(new Dot3D(116.312845, 39.839309, 9000.00));  //位置
mGraphicPoint3D.setSize(20);                                          //大小
mGraphicPoint3D.setColor(Color.RED);                                  //颜色

//1-添加到场景视图默认的覆盖物图层中进行显示(常用方法)
mSceneView.getDefaultGraphics3DOverlay().addGraphic(mGraphicPoint3D);
//2-创建自定义覆盖物图层并添加覆盖物(便于分层管理)
Graphic3DsOverlay graphic3DsOverlay=new Graphic3DsOverlay();
graphic3DsOverlay.addGraphic(mGraphicPoint3D);
mSceneView.getGraphic3DsOverlays().add(graphic3DsOverlay); //将覆盖物图层加到场景视图的覆盖物图层列表中

点.jpg

2 线 Sample详情

//构造线对象
GraphicPolyline3D mGraphicPolyline3D = new GraphicPolyline3D();
//初始化线点序列对象
List<Dot3D> mdot3DsLine = new ArrayList<Dot3D>();
mdot3DsLine.add(new Dot3D(116.405419, 39.916927, 9000));
mdot3DsLine.add(new Dot3D(103.382843,1.098812, 90000.00));
mdot3DsLine.add(new Dot3D(116.405419, 39.916927, 9000));
//设置信息
mGraphicPolyline3D.setPoints(mdot3DsLine);                    //点序列
mGraphicPolyline3D.setColor(Color.argb(128, 255, 255, 0));    //颜色
mGraphicPolyline3D.setLineWidth(6);                           //线宽

线.jpg

3 区 Sample详情

//构造多边形对象
GraphicPolygon3D mGraphicPolgon3D = new GraphicPolygon3D();
//初始化多边形点序列对象
List<Dot3D> mdot3DsLine = new ArrayList<Dot3D>();
mdot3DsLine.add(new Dot3D(118.503816, 42.00238, 9000));
mdot3DsLine.add(new Dot3D(116.499216, 39.834152, 9000));
mdot3DsLine.add(new Dot3D(114.217508, 39.834152, 9000));
//设置信息
mGraphicPolgon3D.setPoints(mdot3DsLine);                          //点序列
mGraphicPolgon3D.setColor(Color.argb(128, 0, 0, 200));            //填充颜色
mGraphicPolgon3D.setBorderlineWidth(1);                           //边线宽
mGraphicPolgon3D.setBorderlineColor(Color.argb(128, 0, 0, 0));    //边线颜色
mGraphicPolgon3D.setExtrusionHeight(90000);                       //覆盖物伸出的高度

区.jpg

4 圆 Sample详情

//构造圆对象
GraphicCircle3D mGraphicCircle3D = new GraphicCircle3D();
//设置信息
mGraphicCircle3D.setCenterPoint(new Dot3D(26.00, 23.71, 9000));  //中心点
mGraphicCircle3D.setRadius(500000);                              //半径
mGraphicCircle3D.setColor(Color.argb(128, 200, 0, 0));           //填充颜色
mGraphicCircle3D.setBorderlineColor(Color.argb(128, 0, 0, 0));   //边线颜色
mGraphicCircle3D.setBorderlineWidth(1);                          //边线宽

圆.jpg

5 椭圆 Sample详情

//构造椭圆对象
GraphicEllipse3D mGraphicEllipse3D = new GraphicEllipse3D();
//设置信息
mGraphicEllipse3D.setPoint(new Dot3D(103.382843,1.098812, 90000.00));  //中心点
mGraphicEllipse3D.setRadiusMinor(100000);                              //短半径
mGraphicEllipse3D.setRadiusMajor(300000);                              //长半径
mGraphicEllipse3D.setBorderlineWidth(1);                               //边线宽  
mGraphicEllipse3D.setColor(Color.RED);                                 //填充颜色

椭圆.jpg

6 文本 Sample详情

文本即文本标注,顾名思义,通过文本描述标注点的信息。

//创建覆盖物对象
GraphicText3D  mGraphicText3D = new GraphicText3D();
mGraphicText3D.setPoint(new Dot3D(114.410142, 30.521057,9000));   //设置文本位置        
mGraphicText3D.setText("武汉");                                   //设置文本内容
mGraphicText3D.setFontSize(30);                                   //字体大小
mGraphicText3D.setColor(Color.YELLOW);                            //颜色

文字.jpg

7 图像 Sample详情

图片即图片的标记,也称图片标注,通过图标来展现标注点的信息。

//实例化图片GraphicImage3D对象
GraphicImage3D  mGraphicImage3D = new GraphicImage3D();
//设置图片路径
mGraphicImage3D.setImagePath(android.os.Environment.getExternalStorageDirectory().getPath() + "/MapGIS Mobile 3D Sample/Resource/annotation.png");
//设置拐角
mGraphicImage3D.setCorners(new Dot(114.00, 30.00), new Dot(114.610142, 30.00), new Dot(114.00, 31.00), new Dot(114.610142, 31.00));

图像.jpg

8 地标 Sample详情

标注,即图文标注,是文本带图片的标记,通过文本结合图标来展现标注点的信息。

//实例化标注GraphicPlaceMarker对象
GraphicPlaceMarker mGraphicPlaceMarker = new GraphicPlaceMarker();
//设置标注图片
mGraphicPlaceMarker.setImagePath(android.os.Environment.getExternalStorageDirectory().getPath() + "/MapGIS Mobile 3D Sample/Resource/ico_result_location_green.png");
//设置标注文字内容
mGraphicPlaceMarker.setLabelText("北京");
//设置标注位置
mGraphicPlaceMarker.setPosition(new Dot3D(116.405419, 39.916927, 9000));

地标.jpg

9 模型 Sample详情

提供多种模型数据的展示。

//构造模型对象
GraphicModel mGraphicModel = new GraphicModel();
//设置信息
mGraphicModel.setModelPath(android.os.Environment.getExternalStorageDirectory().getPath() + "/MapGIS Mobile 3D Sample/Scene/Models/ive/xcgj.ive");       //设置模型资源的路径
mGraphicModel.setPoint(new Dot3D(114.00, 30.00, 10.00));       //设置模型显示的位置
mGraphicModel.setAngleAroundX(270);                            //设置模型显示的角度
mGraphicModel.setAltitudeMode(AltitudeMode.RELATIVETOTERRAIN); //设置高程模式(相对地形高程模式)

覆盖物的高程模式有如下三种类型:

高程模式字段 说明
AltitudeMode.CLAMPTOTERRAIN 贴地形模式
AltitudeMode.NONE 绝对高程模式
AltitudeMode.RELATIVETOTERRAIN 相对地形高程模式

模型.jpg